/**
 * 日期工具类
 */
const dateUtil = {
    /**
     * 获取当月第一天
     * @returns {string} 格式：YYYY-MM-DD
     */
    getMonthFistDay() {
        const now = new Date();
        const year = now.getFullYear();
        const month = now.getMonth() + 1;
        const firstDay = new Date(year, month - 1, 1);
        return this.formatDate(firstDay);
    },

    /**
     * 获取当月最后一天
     * @returns {string} 格式：YYYY-MM-DD
     */
    getMonthLastDay() {
        const now = new Date();
        const year = now.getFullYear();
        const month = now.getMonth() + 1;
        const lastDay = new Date(year, month, 0);
        return this.formatDate(lastDay);
    },

    /**
     * 获取当月所有日期
     * @returns {Array} 日期数组，格式：YYYY-MM-DD
     */
    getMonthDays() {
        const now = new Date();
        const year = now.getFullYear();
        const month = now.getMonth() + 1;
        const daysInMonth = new Date(year, month, 0).getDate();
        const days = [];
        
        for (let i = 1; i <= daysInMonth; i++) {
            const day = new Date(year, month - 1, i);
            days.push(this.formatDate(day));
        }
        
        return days;
    },

    /**
     * 格式化日期
     * @param {Date} date 日期对象
     * @returns {string} 格式：YYYY-MM-DD
     */
    formatDate(date) {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`;
    },

    /**
     * 格式化日期时间
     * @param {Date} date 日期对象
     * @returns {string} 格式：YYYY-MM-DD HH:mm:ss
     */
    formatDateTime(date) {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },

    /**
     * 获取当前日期
     * @returns {string} 格式：YYYY-MM-DD
     */
    getCurrentDate() {
        return this.formatDate(new Date());
    },

    /**
     * 获取当前日期时间
     * @returns {string} 格式：YYYY-MM-DD HH:mm:ss
     */
    getCurrentDateTime() {
        return this.formatDateTime(new Date());
    },

    /**
     * 获取指定天数前的日期
     * @param {number} days 天数
     * @returns {string} 格式：YYYY-MM-DD
     */
    getDaysAgo(days) {
        const date = new Date();
        date.setDate(date.getDate() - days);
        return this.formatDate(date);
    },

    /**
     * 获取指定天数后的日期
     * @param {number} days 天数
     * @returns {string} 格式：YYYY-MM-DD
     */
    getDaysAfter(days) {
        const date = new Date();
        date.setDate(date.getDate() + days);
        return this.formatDate(date);
    },

    /**
     * 获取本周周一
     * @returns {string} 格式：YYYY-MM-DD
     */
    getMonday() {
        const now = new Date();
        const day = now.getDay();
        const diff = now.getDate() - day + (day === 0 ? -6 : 1); // 调整周日
        const monday = new Date(now.setDate(diff));
        return this.formatDate(monday);
    },

    /**
     * 获取本周所有日期
     * @returns {Array} 日期数组，格式：YYYY-MM-DD
     */
    getWeekDays() {
        const monday = new Date(this.getMonday());
        const days = [];
        
        for (let i = 0; i < 7; i++) {
            const day = new Date(monday);
            day.setDate(monday.getDate() + i);
            days.push(this.formatDate(day));
        }
        
        return days;
    },

    /**
     * 获取指定日期是星期几
     * @param {Date|string} date 日期
     * @returns {number} 0-6 (0是周日)
     */
    getDayOfWeek(date) {
        const d = typeof date === 'string' ? new Date(date) : date;
        return d.getDay();
    },

    /**
     * 获取指定日期是星期几的中文名称
     * @param {Date|string} date 日期
     * @returns {string} 星期几
     */
    getDayOfWeekName(date) {
        const dayNames = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
        return dayNames[this.getDayOfWeek(date)];
    }
};

export default dateUtil;

